package com.itheima.netty.c4;

import io.netty.channel.EventLoop;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.util.concurrent.DefaultPromise;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener;
import io.netty.util.concurrent.Promise;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;

@Slf4j
public class TestNettyPromise {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //准备eventLoop
        NioEventLoopGroup group = new NioEventLoopGroup();
        EventLoop eventLoop = group.next();
        /*
        * DefaultPromise 是一个通用的 Promise 实现类，它可以用于表示任何类型的异步操作的结果
        * DefaultChannelPromise 是专门用于表示 Channel 相关的异步操作结果的实现类
        * DefaultPromise 是一个通用的 Promise 实现类，可以用于表示任何类型的异步操作结果，
        * 而 DefaultChannelPromise 是专门用于表示 Channel 相关的异步操作结果的实现类。
        * 它们都是用来处理异步操作结果的，可以通过监听器或回调函数来处理操作的成功或失败。
        * */
        //创建promise
        DefaultPromise<Integer> promise = new DefaultPromise<>(eventLoop);

        new Thread(()->{
            //开启一个线程执行计算，计算完毕后向promise填充结果
            log.info("执行计算");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            promise.setSuccess(13);
        }).start();
        log.info("等待结果");
        log.info("结果是{}",promise.get());


    }
}
